package utils

import (
	"math"
	"strings"

	"github.com/imroc/req/v3"
)

type IpInfo struct {
	Ip      string `json:"ip"`
	Address string `json:"address"`
}

// match 比较两个字节序列是否相等
//
//	data - 数据
//	pattern - 模式
//
// 返回值:
//
//	是否匹配
func Match(data, pattern []byte) bool {
	for i := range pattern {
		if data[i] != pattern[i] {
			return false
		}
	}
	return true
}

// 获取当前ip和地址
func GetIpAndAddress() (string, string) {
	var ipInfo IpInfo
	req.R().SetSuccessResult(&ipInfo).Get("https://ip.cn/api/index?ip=&type=0")
	return ipInfo.Ip, ipInfo.Address
}

// 热键字符串转换
func ParseHotkey(input string) string {
	parts := strings.Split(input, " + ")

	// 用于存储功能键的缩写
	modifiers := ""
	// 用于存储普通按键
	var key string

	for _, part := range parts {
		switch strings.ToLower(part) {
		case "ctrl":
			modifiers += "c"
		case "win":
			modifiers += "w"
		case "alt":
			modifiers += "a"
		case "shift":
			modifiers += "s"
		default:
			key = strings.ToLower(part)
		}
	}

	// 如果有功能键和普通按键，使用下划线连接
	if modifiers != "" && key != "" {
		return modifiers + "_" + key
	}
	return modifiers + key
}

// CalculateVerticalAngle 计算当前位置与目标位置的角度
func CalculateVerticalAngle(x1, y1, x2, y2 float64) float64 {
	theta := math.Atan2(x2-x1, y2-y1)
	thetaDeg := theta * (180 / math.Pi)
	if thetaDeg < 0 {
		thetaDeg += 360
	}
	return thetaDeg
}

// GetThetaDeg 根据a和b值计算视角角度
func GetThetaDeg(a, b float64) float64 {
	// 计算a和b的反正切值
	theta := math.Atan2(-b, a)
	// 将弧度转换为角度
	thetaDeg := theta * (180 / math.Pi)
	if thetaDeg < 0 {
		thetaDeg += 360
	}
	return thetaDeg
}
